package com.gzy.cs5.service;

import com.gzy.cs5.exception.BusinessException;
import com.gzy.cs5.lang.OrderStatus;
import com.gzy.cs5.model.Item;
import com.gzy.cs5.model.Order;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单服务接口
 */
public interface OrderService {

    // 真实环境使用的创建方法（自动获取当前时间）
    Order createOrder(List<Item> items, boolean isVIP) throws BusinessException;

    /**
     * 创建订单（带时间模拟参数）
     * @param items 商品列表
     * @param isVIP 是否VIP用户
     * @param currentTime 模拟当前时间（用于测试时间敏感规则）
     */
    Order createOrder(List<Item> items, boolean isVIP, LocalDateTime currentTime)
            throws BusinessException;

    /**
     * 取消订单（带时间模拟参数）
     * @param orderId 订单ID
     * @param currentTime 模拟当前时间（用于计算超时）
     */
    void cancelOrder(String orderId, LocalDateTime currentTime)
            throws BusinessException;

    /**
     * 获取所有订单
     */
    List<Order> getAllOrders();

    /**
     * 根据订单ID获取订单
     * @param orderId 订单ID
     */
    Order getOrderById(String orderId) throws BusinessException;

    /**
     * 更新订单状态
     * @param orderId 订单ID
     * @param status 新状态
     */
    void updateOrderStatus(String orderId, OrderStatus status)
            throws BusinessException;

}
